Stata17之Lasso新功能
本文作者:方一卓,河南大学经济学院
本文编辑:陈梦华
技术总编:李婷婷
Stata&Python云端课程来啦!
好雨知时节,当春乃发生。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》、《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!
Lasso在Stata17中更新如下了几个新功能 :
BIC for lasso penalty selection Lasso with clustered date Treatment-effects estimation using lasso
Lasso在1996年由Robert Tibshirani首次提出,全称为Least absolute shrinkage and selection operator,是一种压缩估计的方法,它通过构造一个惩罚函数来压缩一些回归系数,从而得到一个较为精炼的模型。虽然Lasso的估计是有偏的,但其在引入一定偏差的同时,可以大量降低估计的方差,从而降低模型的MSE(均方误差),使估计更为准确。
为什么要用Lasso?在数据时代的今天,我们并不缺乏数据,缺乏的是对数据的处理。举一个例子,我们想要了解你的颜值的影响因素,需要考虑:基因、父母在婴儿时期的照顾、成长环境(成长环境又可细分为n条因素)、饮食习惯、锻炼、婚姻、生育、工作、科研......从你在细胞阶段到结婚生子,颜值可能受到很多因素的影响,但是我们发现,好像只有为数不多的几个变量对因变量(颜值)有显著的贡献,其他变量基本可以忽略。那么,哪些变量是重要的呢?高维数据的分析依靠单纯的人工收集和计算很难完成,这就需要依靠监督式机器学习法——"Lasso",来帮我们解决高维度变量处理难题。
Lasso的表达式如下:这是我们最常见的Lasso表达式,式子中的第二项就是惩罚项,λ为惩罚项的调节参数,λ越大,对估计参数的压缩作用就越强。当我们对这个目标函数求最小时,一些不那么重要的自变量的系数将被压缩为0,从而达到筛选变量的作用。λ取值的确定通常采用CV、 adaptive、plugin 和 BIC 等方法来确定。
接下来分别为大家介绍Lasso在Stata17中的新功能。
BIC for lasso penalty selection
BIC(Bayesian Information Criterion,贝叶斯信息准则)在训练模型时,增加参数数量,也就是增加模型复杂度,会增大似然函数,但是也会导致过拟合现象,针对该问题,BIC引入了与模型参数个数相关的惩罚项,考虑了样本数量,样本数量过多时,可有效防止模型精确度过高而导致的模型复杂化,其限制程度比CV等更为苛刻,但在实际应用中依据不同模型进行选择。
下面我们先使用Stata中宾夕法尼亚州独生子女出生的婴儿/母亲/父亲特征信息来回顾一下Lasso的基础用法(系统默认使用CV来实现λ的选取):
clear all
webuse cattaneo2
lasso linear bweight c.mage##c.mage c.fage##c.fage c.mage#c.fage ///
c.fedu##c.medu i.(mmarried mhisp fhisp foreign alcohol msmoke ///
fbaby prenatal1)
lasso linear bweight c.mage##c.mage c.fage##c.fage c.mage#c.fage ///
c.fedu##c.medu i.(mmarried mhisp fhisp foreign alcohol msmoke fbaby ///
prenatal1), selection(bic)
通过Stata给出的结果我们可以清楚看到,使用BIC准则之后,λ的值为15,筛选更为严格,26个变量中只有6个变量符合λ的筛选要求。
λ取值的选择过程
bicplot
λ对变量的筛选过程
lassoknots
不同λ取值下的自变量系数路径图
coefpath, legend(on position(2) cols(1)) xunits(lnlambda) xline(15)
xline()可显示出所选取的λ筛选线,前面我们计算得出的最优λ为15,根据λ值进行筛选,在图中我们可以直观的看到随着λ值变大。自变量系数逐渐变为0,当λ=15时,只有6个自变量的系数不为0。
lassogof比较BIC与CV的选择结果差异
lasso linear bweight c.mage##c.mage c.fage##c.fage c.mage#c.fage ///
c.fedu##c.medu i.(mmarried mhisp fhisp foreign alcohol ///
msmoke fbaby prenatal1)
estimates store cv
lasso linear bweight c.mage##c.mage c.fage##c.fage c.mage#c.fage ///
c.fedu##c.medu i.(mmarried mhisp fhisp foreign alcohol msmoke ///
fbaby prenatal1), selection(bic)
estimates store bic
lassogof cv bic
运行结果如下:
由以上结果可以知道,虽然BIC相较于CV来说对变量的筛选更为严格,但并不意味着MSE就会更小,具体的应用要根据情况而定,整体来说无论是BIC还是CV对于MSE的影响程度都是相似的,都对变量进行了筛选压缩,使模型更为精简高效。
对于“聚类数据”(cluster data),由于观测值中存在自相关,会导致估计结果存在偏差。在Stata17中,使用命令lasso,可通过新增选择项 “cluster(clustvar)” 来处理聚类数据,来得到聚类稳健的标准误(cluster-robust standard errors)。
lasso linear bweight c.mage##c.mage c.fage##c.fage ///
c.mage#c.fage c.fedu##c.medu i.(mmarried mhisp fhisp ///
foreign alcohol msmoke fbaby prenatal1),selection(bic) cluster(bweight)
运行结果如下:
处理效应模型通常用来解决政策效用评估中虚拟变量的内生性问题,通过lasso可以有效的对潜在协变量进行筛选。
下面我们利用单双侧肺部移植的数据来简单的测试一下telasso的用法。
webuse lung,clear
quietly vl set
vl create cvars = vlcontinuous - (fev1p)
vl create fvars = vlcategorical - (transtype)
vl sub allvars = c.cvars i.fvars c.cvars#i.fvars
telasso (fev1p $allvars) (transtype $allvars)
运行结果如下:
fevlp为生活质量,transtype为肺部移植类型,通过vl命令生成所有潜在协变量并放入allvars内,Pomean行的Coefficient表示所有患者选择单侧肺移植(SLT)的生活质量提高的平均值为46.5%,ATE行的Coefficient表示如果所有患者都选择双侧肺移植(BLT)时会比所有患者选择单侧肺移植(SLT)时的治疗结果高出37.5%。
以上就是今天对Stata17之Lasso新功能的介绍了,你学会了嘛?
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐从第七次人口普查看中国人口变化|Stata与Python交互绘图
200万投资者关注!!哪家公司这么牛?
带你领略一天天气之变化
利用pyecharts看微博粉丝地区分布
零值太多怎么办?解锁Stata17新命令ziologit
Stata17新功能之Python API 小罗肥归升级啦|解锁Stata17之新命令xtmlogit 初识PyStata
辞旧迎新——Stata17之Do-file编辑器优化
Stata17新亮点——解放表格输出生产力
【爬虫+可视化】链家网北京租房信息
手把手教你如何获取股票数据和可视化
Countvalues——数数的超级小帮手
下拉选择框如何变成“小猫咪” | selenium小技巧
Python中的运算符知多少?
快来get缺失值的正确打开方式
frame框架——我到底在哪个“房间”如何使用Pandas读取txt文件?
基于MySQL数据库实现增量式爬取
寻找春日气息|本月最受欢迎的景点都在这里!
问世间情为何物,大数据也想参悟——后考研时代,何以解忧?唯有数据!
Python与数据库交互—浅述pymysql
偷懒小妙招|selenium之玩转鼠标键盘操作--鼠标篇
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。